package info.opencards.md;
import com.sun.javafx.application.PlatformImpl;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// Adopted from https://gist.github.com/anjackson/1640654
// see http://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm
public class SwingFXWebView extends JPanel {
private JFXPanel jfxPanel;
private JButton swingButton;
private WebEngine webEngine;
public SwingFXWebView() {
initComponents();
}
public static void main(String... args) {
// Run this later:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame();
frame.getContentPane().add(new SwingFXWebView());
frame.setMinimumSize(new Dimension(640, 480));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
private void initComponents() {
jfxPanel = new JFXPanel();
createScene();
setLayout(new BorderLayout());
add(jfxPanel, BorderLayout.CENTER);
swingButton = new JButton();
swingButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Platform.runLater(new Runnable() {
@Override
public void run() {
webEngine.reload();
}
});
}
});
swingButton.setText("Reload");
add(swingButton, BorderLayout.SOUTH);
}
/**
* createScene
* <p/>
* Note: Key is that Scene needs to be created and run on "FX user thread" NOT on the AWT-EventQueue Thread
*/
private void createScene() {
PlatformImpl.startup(new Runnable() {
@Override
public void run() {
Stage stage;
WebView browser;
stage = new Stage();
stage.setTitle("Hello Java FX");
stage.setResizable(true);
Group root = new Group();
Scene scene = new Scene(root, 80, 20);
stage.setScene(scene);
// Set up the embedded browser:
browser = new WebView();
webEngine = browser.getEngine();
// webEngine.load("http://heise.de");
// ScrollPane scrollPane = new ScrollPane();
// scrollPane.setContent(browser);
webEngine.loadContent("<b>asdf</b>");
// root.getChildren().addAll(scrollPane);
// scene.setRoot(root);
// stage.setScene(scene);
ObservableList<Node> children = root.getChildren();
children.add(browser);
jfxPanel.setScene(scene);
}
});
}
}